home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / WIN_PRO / WTEK0593.ZIP;1 / SWITCH.ZIP / SCRLWIN.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-08  |  5.5 KB  |  153 lines

  1. /*------------------------------------------------------------------------*/
  2. /*                                                                        */
  3. /*  SCRLWIN.CPP                                                           */
  4. /*                                                                        */
  5. /*  Implements non-inline functions from SCRLWIN.H                        */
  6. /*                                                                        */
  7. /*------------------------------------------------------------------------*/
  8.  
  9. #include "scrlwin.h"
  10.  
  11. /*------------------------------------------------------------------------*/
  12. /*                                                                        */
  13. /*  Member functions of Scroller.                                         */
  14. /*                                                                        */
  15. /*------------------------------------------------------------------------*/
  16.  
  17. void Scroller::SetTextSize( int sz )
  18. {
  19.     TextSize = sz;
  20.     if( Pos > sz )
  21.         Pos = sz;
  22.     SetScrollRange( GetHandle(), Which, 0, TextSize, FALSE );
  23.     SetScrollPos( GetHandle(), Which, Pos, TRUE );
  24. }
  25.  
  26. void Scroller::SetWinSize( int sz )
  27. {
  28.     if( Pos > sz )
  29.         Pos = sz;
  30.     SetScrollPos( GetHandle(), Which, Pos, TRUE );
  31. }
  32.  
  33. long Scroller::OnScroll( unsigned where )
  34. {
  35.     int delta;
  36.     switch( where )
  37.         {
  38.         case SB_LINEUP:
  39.             delta = -1;
  40.             break;
  41.         case SB_LINEDOWN:
  42.             delta = 1;
  43.             break;
  44.         case SB_PAGEUP:
  45.             delta = min( -1, -GetPageSize() );
  46.             break;
  47.         case SB_PAGEDOWN:
  48.             delta = max( 1, GetPageSize() );
  49.             break;
  50.         default:
  51.             delta = 0;
  52.             break;
  53.         }
  54.     delta = max( -Pos, min( delta, int(TextSize-Pos-GetPageSize()) ) );
  55.     if( delta != 0 )
  56.         {
  57.         Pos += delta;
  58.         if( Which == Vert )
  59.             ScrollWindow( GetHandle(), 0, -GetCharHeight()*delta, 0, 0 );
  60.         else
  61.             ScrollWindow( GetHandle(), -GetCharWidth()*delta, 0, 0, 0 );
  62.         SetScrollPos( GetHandle(), Which, Pos, TRUE );
  63.         UpdateWindow( GetHandle() );
  64.         }
  65.     return 0;
  66. }
  67.  
  68. /*------------------------------------------------------------------------*/
  69. /*                                                                        */
  70. /*  Member functions and static member data of VScroller                  */
  71. /*                                                                        */
  72. /*------------------------------------------------------------------------*/
  73.  
  74. BI_SVectorImp<DispatchRecord<VScroller> > VScroller::Map( 10, 5 );
  75.  
  76. int VScroller::Dispatch( UINT msg, UINT w, LONG l, LONG& res )
  77. {
  78.     unsigned loc = Map.find( DispatchRecord<VScroller>( msg, VoidType, 0 ) );
  79.     if( loc == UINT_MAX )
  80.         return 0;
  81.     else
  82.         {
  83.         DispatchRecord<VScroller> entry = Map[loc];
  84.         DispatchRecord<VScroller>::VoidFunc proc = entry.Proc;
  85.         switch( entry.Type )
  86.             {
  87.             case VoidType:
  88.                 res = (this->*(DispatchRecord<VScroller>::VoidFunc)proc)();
  89.                 break;
  90.             case UUType:
  91.                 res = (this->*(DispatchRecord<VScroller>::UUFunc)proc)( LOWORD(l),
  92.                                                               HIWORD(l) );
  93.                 break;
  94.             case UType:
  95.                 res = (this->*(DispatchRecord<VScroller>::UFunc)proc)( w );
  96.                 break;
  97.             }
  98.         return 1;
  99.         }
  100. }
  101.  
  102. /*------------------------------------------------------------------------*/
  103. /*                                                                        */
  104. /*  Member functions and static member data of HScroller                  */
  105. /*                                                                        */
  106. /*------------------------------------------------------------------------*/
  107.  
  108. BI_SVectorImp<DispatchRecord<HScroller> > HScroller::Map( 10, 5 );
  109.  
  110. int HScroller::Dispatch( UINT msg, UINT w, LONG l, LONG& res )
  111. {
  112.     unsigned loc = Map.find( DispatchRecord<HScroller>( msg, VoidType, 0 ) );
  113.     if( loc == UINT_MAX )
  114.         return 0;
  115.     else
  116.         {
  117.         DispatchRecord<HScroller> entry = Map[loc];
  118.         DispatchRecord<HScroller>::VoidFunc proc = entry.Proc;
  119.         switch( entry.Type )
  120.             {
  121.             case VoidType:
  122.                 res = (this->*(DispatchRecord<HScroller>::VoidFunc)proc)();
  123.                 break;
  124.             case UUType:
  125.                 res = (this->*(DispatchRecord<HScroller>::UUFunc)proc)( LOWORD(l),
  126.                                                               HIWORD(l) );
  127.                 break;
  128.             case UType:
  129.                 res = (this->*(DispatchRecord<HScroller>::UFunc)proc)( w );
  130.                 break;
  131.             }
  132.         return 1;
  133.         }
  134. }
  135.  
  136. /*------------------------------------------------------------------------*/
  137. /*                                                                        */
  138. /*  Member functions of ScrollableText                                    */
  139. /*                                                                        */
  140. /*------------------------------------------------------------------------*/
  141.  
  142. int ScrollableText::Dispatch( UINT msg, UINT w, LONG l, LONG& res )
  143. {
  144.     if( TextWindow::Dispatch( msg, w, l, res ) ||
  145.         VScroller::Dispatch( msg, w, l, res )  ||
  146.         HScroller::Dispatch( msg, w, l, res )
  147.       )
  148.         return 1;
  149.     else
  150.         return 0;
  151. }
  152.  
  153.